--- permalink: /nb/parcoursup/ layout: nb author_profile: false toc: true toc_label: Sommaire toc_sticky: true --- {% raw %}
Chargeons les données sur https://data.enseignementsup-recherche.gouv.fr/pages/home/?flg=fr, en ne conservant que les colonnes les plus intéressantes et en les renommant pour plus de clarté :
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from IPython.display import Image
import pandas as pd
import plotly.express as px
df = pd.read_csv("https://data.enseignementsup-recherche.gouv.fr/explore/dataset/fr-esr-parcoursup/download/?format=csv&timezone=Europe/Berlin&lang=fr&use_labels_for_header=true&csv_separator=%3B", sep=";") \
.iloc[:, [110, 3, 5, 7, 8, 9, 17, 45, 82, 83, 84, 85, 101, 107]] \
.rename(columns={"Effectif total des candidats pour une formation": "Candidats", "% d’admis néo bacheliers sans mention au bac": "Sans Mention", "% d’admis néo bacheliers avec mention Assez Bien au bac": "Mention Assez Bien", "% d’admis néo bacheliers avec mention Bien au bac": "Mention Bien", "% d’admis néo bacheliers avec mention Très Bien au bac": "Mention Très Bien", "Rang du dernier appelé du groupe 1": "Rang dernier appelé", "Taux d’accès des candidats ayant postulé à la formation (ratio entre le dernier appelé et le nombre vœux PP)": "Taux d'accès", "LIB_FOR_VOE_INS": "Filière", "Effectif total des candidats ayant accepté la proposition de l’établissement (admis)": "Effectif"}) \
.dropna()
import plotly.io as pio
pio.renderers.default = 'notebook'
df.describe()
On observe que l'effectif moyen dans une formation est environ 50, avec un maximum de 1569 pour la formation suivante :
df.iloc[[df["Effectif"].argmax()]]
df.hist(bins=30, figsize=(20, 10));
Voici le pourcentage de l'effectif total dans les 15 premières formations :
df_effectif = df.groupby("Filière").sum().sort_values("Effectif", ascending=False)[:15]
px.pie(df_effectif, values="Effectif", names=df_effectif.index, title="Pourcentage des effectifs par filière") \
.show(renderer="notebook")
df_cpge = df[df["Filière"].str.contains("CPGE")]
mentions = ["Sans Mention", "Mention Assez Bien", "Mention Bien", "Mention Très Bien"]
col = mentions + ["Taux d'accès"]
df_cpge[mentions] = df_cpge[mentions].mul(df_cpge["Effectif"], axis=0)/100.
df_cpge_mention = df_cpge.groupby("Filière").count().sort_values("Effectif", ascending=False)[:11]
px.pie(df_cpge_mention, values="Effectif", names=df_cpge_mention.index, title="Nombre de classes par filière de CPGE") \
.show(renderer="notebook")
df_mention = df_cpge.groupby("Filière").agg(dict({m: "sum" for m in col}, **{"Effectif": "sum"}))
df_m = df_mention[mentions].div(df_mention["Effectif"], axis=0).loc[df_cpge_mention.index].sort_values("Mention Très Bien", ascending=False)
px.bar(df_m) \
.show(renderer="notebook")
df_mention = df_cpge.groupby("Filière").agg({"Taux d'accès": "mean"}).loc[df_cpge_mention.index].sort_values(by="Taux d'accès")
px.bar(df_mention, labels={"Taux d'accès"}) \
.show(renderer="notebook")